#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e5+10,INF=0x7fffffff;
int n,cnt,root,top,stac[MAXN];
struct Splay
{
	int key,c[2],fa,min,loc,siz;
	bool rev;
}a[MAXN];
struct node
{
	int x,y;
}b[MAXN];
bool cmp1(node a,node b)
{
	return a.x==b.x?a.y<b.y:a.x<b.x;
}
bool cmp2(node a,node b)
{
	return a.y<b.y;
}
void push_up(int o)
{
	a[o].min=a[o].key,a[o].loc=o;
	if(a[a[o].c[0]].min<a[o].min)a[o].min=a[a[o].c[0]].min,a[o].loc=a[a[o].c[0]].loc;
	if(a[a[o].c[1]].min<a[o].min)a[o].min=a[a[o].c[1]].min,a[o].loc=a[a[o].c[1]].loc;
	a[o].siz=a[a[o].c[0]].siz+a[a[o].c[1]].siz+1;
	return;
}
void reverse(int o)
{
	if(!o)return;
	swap(a[o].c[0],a[o].c[1]);
	a[o].rev^=1;
	return;
}
void push_down(int o)
{
	if(a[o].rev)
	{
		reverse(a[o].c[0]);
		reverse(a[o].c[1]);
		a[o].rev=false;
	}
	return;
}
void rotate(int &o,int x)
{
	int y=a[x].fa,z=a[y].fa,dy=a[y].c[1]==x,dz=a[z].c[1]==y;
	push_down(y);
	if(o==y)o=x;
	else a[z].c[dz]=x;
	a[x].fa=z;
	a[y].c[dy]=a[x].c[dy^1];
	a[a[y].c[dy]].fa=y;
	a[x].c[dy^1]=y;
	a[y].fa=x;
	push_up(y);
	return;
}
void splay(int &o,int x)
{
	top=0;stac[++top]=x;
	for(int i=x;a[i].fa;i=a[i].fa)
		stac[++top]=a[i].fa;
	for(int i=top;i;--i)
		push_down(stac[i]);
	push_down(x);
	while(o!=x)
	{
		int y=a[x].fa,z=a[y].fa;
		if(o!=y)
		{
			if(a[y].c[1]==x^a[z].c[1]==y)rotate(o,x);
			else rotate(o,y);
		}
		rotate(o,x);
	}
	push_up(x);
	return;
}
int find(int o,int x)
{
	push_down(o);
	if(x<=a[a[o].c[0]].siz)return find(a[o].c[0],x);
	if(x==a[a[o].c[0]].siz+1)return o;
	return find(a[o].c[1],x-a[a[o].c[0]].siz-1);
}
int init(int x)
{
	int o=++cnt;
	a[o].key=x;
	a[o].siz=1;
	return o;
}
int build(int l,int r)
{
	if(l>r)return 0;
	int mid=(l+r)>>1,lc,rc,o;
	lc=build(l,mid-1);
	o=init(b[mid].x);
	rc=build(mid+1,r);
	a[o].c[0]=lc;a[lc].fa=o;
	a[o].c[1]=rc;a[rc].fa=o;
	push_up(o);
	return o;
}
int main()
{
	scanf("%d",&n);
	a[0].key=a[0].min=INF;
	for(int i=1;i<=n;++i)
	{
		scanf("%d",&b[i+1].x);
		b[i+1].y=i;
	}
	b[1].x=b[n+2].x=INF;
	sort(b+2,b+2+n,cmp1);
	for(int i=1;i<=n;++i)b[i+1].x=i;
	sort(b+2,b+2+n,cmp2);
	root=build(1,n+2);
	for(int i=1;i<=n;++i)
	{
		int l=find(root,i),r=find(root,n+2);
		splay(root,r);splay(a[root].c[0],l);
		splay(root,a[a[l].c[1]].loc);
		printf("%d",a[a[root].c[0]].siz);
		if(i!=n)printf(" ");
		r=find(root,a[a[root].c[0]].siz+2);
		splay(root,r);splay(a[root].c[0],l);
		reverse(a[l].c[1]);
	}
	puts("");
	return 0;
}
